5.3 持续集成实现
学习目标:
- 掌握持续集成流程
- 掌握脚本编写方法
5.3.1 目录环境
git仓库路径:
/usr/git_repos/hello_web.git git server搭建方法
在git服务器上创建目录结构
└── web_project ├── hello_web └── script
5.3.2 手动执行获取代码和编译
下载master分支最新代码
git@ubuntu:~/web_project/hello_web$ pwd /home/git/web_project/hello_web # 下载代码 git@ubuntu:~/web_project/hello_web$ git archive --remote=/usr/git_repos/hello_web.git --format=tar -o project.tar master git@ubuntu:~/web_project/hello_web$ ls project.tar # 解压代码 git@ubuntu:~/web_project/hello_web$tar xf project.tar
编译
git@ubuntu:~/web_project/hello_web$ export GOPATH=/home/git/web_project/hello_web/ git@ubuntu:~/web_project/hello_web$ /usr/local/go/bin/go install main git@ubuntu:~/web_project/hello_web$ ls bin main
5.3.3 脚本实现编译
编写脚本的步骤
- 确定框架 将步骤定义为函数
- 命令填充 拷贝命令到函数内
- 功能扩充
- 变量替换
- 功能参数化
- 返回值处理
#!/bin/bash
LAST_COMMIT="$2"
get_prefix() {
TIMESTAMP=`date +%Y%m%d%H%M%S`
SHORT_COMMIT="${LAST_COMMIT:0:4}XXX${LAST_COMMIT:0-2:2}"
echo "${SHORT_COMMIT}_${TIMESTAMP}"
}
export GOPATH="/home/git/web_project/`get_prefix`_hello_web"
build_prj() {
/usr/local/go/bin/go install main
}
get_code() {
mkdir "${GOPATH}"
cd "${GOPATH}/"
git archive --remote /usr/git_repos/hello_web.git --format=tar -o project.tar master && tar xf project.tar
}
build() {
get_code && build_prj
}
info_msg() {
echo "Usage:$0 {build}"
}
main() {
case "$1" in
"build")
build
;;
*)
info_msg
;;
esac
return $?
}
main $1
exit $?
5.3.4 钩子脚本post_receive编写
#!/bin/bash
read stdin
LAST_COMMIT=`echo "${stdin}" | awk '{print $1}'`
bash /home/git/web_project/script/build_deploy.sh build "${LAST_COMMIT}"